package basics.jvm;

import java.util.concurrent.TimeUnit;

/**
 * <a href="">
 * </a>
 *
 * <p><span color="#87CEEB">描述:</span>
 * 使用 finalize 进行自救 - <span color="red">不推荐！</span>
 *
 * @author or2
 * @date 2021年09月25日 时间: 17:31
 */
public class SaveSelfWithFinalize {

    private static SaveSelfWithFinalize self;

    @Override
    protected void finalize() throws Throwable {
        System.out.println("开始自救...");
        self = this;
    }

    public static void main(String[] args) throws InterruptedException {
        self = new SaveSelfWithFinalize();
//————————————————————————————————————————————————————————————————————————————————————————————————————————————
        self = null;
        System.out.println("第一次清理");
        System.gc();
        TimeUnit.SECONDS.sleep(1);
        /*此处是否为null?  */
        System.out.println(self);
//————————————————————————————————————————————————————————————————————————————————————————————————————————————
        TimeUnit.SECONDS.sleep(1);
//————————————————————————————————————————————————————————————————————————————————————————————————————————————
        self = null;
        System.out.println("第二次清理");
        System.gc();
        TimeUnit.SECONDS.sleep(1);
        System.out.println(self);
    }

    @Override
    public String toString() {
        return "SaveSelfWithFinalize{我思故我在!}";
    }
}
